package com.twu.biblioteca.controller;

import com.twu.biblioteca.exception.BookNotAvailableException;
import com.twu.biblioteca.exception.MovieNotAvailableException;
import com.twu.biblioteca.exception.ReturnBookNotAvailableException;
import com.twu.biblioteca.model.Biblioteca;
import com.twu.biblioteca.model.BibliotecaBook;
import com.twu.biblioteca.model.BibliotecaMovie;
import com.twu.biblioteca.model.BibliotecaUser;

import java.util.List;

public class BibliotecaController {

    private Biblioteca biblioteca;

    public BibliotecaController control(Biblioteca biblioteca) {
        this.biblioteca = biblioteca;
        return this;
    }

    public List<BibliotecaBook> getBookList() {
        return biblioteca.getBooks();
    }

    public BibliotecaBook checkout(String bookName) {
        try {
            return biblioteca.checkoutBook(bookName);
        } catch (BookNotAvailableException e) {
            return null;
        }
    }

    public boolean returnBook(String bookName) {
        try {
            biblioteca.checkinBook(bookName);
            return true;
        } catch (ReturnBookNotAvailableException e) {
            return false;
        }
    }

    public void addBook(String bookName) {
        BibliotecaBook book = new BibliotecaBook(bookName);
        biblioteca.addBook(book);
    }

    public List<BibliotecaMovie> getMovieList() {
        return biblioteca.getMovieList();
    }

    public BibliotecaMovie checkoutMovie(String movieName) {
        try {
            return biblioteca.checkoutMovie(movieName);
        } catch (MovieNotAvailableException e) {
            return null;
        }
    }

    public boolean setLogin(BibliotecaUser user) {
        boolean checkPassed = BibliotecaUserChecker.check(user);
        if (checkPassed){
            biblioteca.setCurrentUser(user);
        }
        return checkPassed;
    }

    public BibliotecaUser getUser() {
        return biblioteca.getCurrentUser();
    }
}
